package com.javaclimb.music.controller;

import com.alibaba.fastjson.JSONObject;
import com.javaclimb.music.domain.Singer;
import com.javaclimb.music.domain.Song;
import com.javaclimb.music.service.SongService;
import com.javaclimb.music.utils.Consts;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;

/**
 * 歌曲管理controller
 * */
@RestController
@RequestMapping("/song")
public class SongController {

    @Autowired
    private SongService songService;

    /**
     * 添加歌曲
     * */
    @PostMapping("/add")
    public Object addSong(Song song, @RequestParam("file")MultipartFile mpFile){
        //System.out.println(singer);
        //return singer;
        JSONObject jsonObject = new JSONObject();
        //上传歌曲文件
        if(mpFile.isEmpty()){
            jsonObject.put(Consts.CODE, 0);
            jsonObject.put(Consts.MSG, "保存失败");
            return jsonObject;
        }
        //文件名 = 当前时间到毫秒 + 原来的文件名
        String fileName = System.currentTimeMillis() + mpFile.getOriginalFilename();
        //文件路径
        String filePath = System.getProperty("user.dir") + System.getProperty("file.separator")
                + "song";
        //如果文件路径不存在，新增该路径
        File file = new File(filePath);
        if(!file.exists()){
            file.mkdirs();
        }
        //实际的文件地址
        File dest = new File(filePath + System.getProperty("file.separator")  + fileName);
        //存储到数据库里的相对文件地址
        String storeUrlPath = "/song/" + fileName;
        try {
            mpFile.transferTo(dest);
            song.setPic("/img/songPic/tubiao.jpg");
            song.setUrl(storeUrlPath);
        } catch (IOException e) {
            jsonObject.put(Consts.CODE, 0);
            jsonObject.put(Consts.MSG, "保存失败" + e.getMessage());
            return jsonObject;
        }
        System.out.println(song);
        boolean flag = songService.insert(song);
        if(flag){
            jsonObject.put(Consts.CODE, 1);
            jsonObject.put(Consts.MSG, "保存成功");
            jsonObject.put("avator", storeUrlPath);
            return jsonObject;
        }
        jsonObject.put(Consts.CODE, 0);
        jsonObject.put(Consts.MSG, "保存失败");
        return jsonObject;
    }

    /**
     * 根据歌手id查询歌曲
     *
     * */
    @GetMapping("/singer/detail")
    public Object songOfSingerId(Integer singerId){
        JSONObject jsonObject = new JSONObject();
        return songService.songOfSingerId(singerId);
    }

    /**
     * 修改歌曲
     * */
    @PostMapping("/update")
    public Object updateSong(Song song){
        System.out.println(song);
        JSONObject jsonObject = new JSONObject();
        boolean flag = songService.update(song);
        System.out.println();
        if(flag){
            jsonObject.put(Consts.CODE, 1);
            jsonObject.put(Consts.MSG, "修改成功");
            return jsonObject;
        }
        jsonObject.put(Consts.CODE, 0);
        jsonObject.put(Consts.MSG, "修改失败");
        return jsonObject;
    }

    /**
     * 删除歌曲
     * */
    @GetMapping("/delete")
    public Object deleteSinger(Integer id){
        //return singer;
        boolean flag = songService.delete(id);
        return flag;
    }

    /**
     * 更新歌曲图片
     * */
    @PostMapping("/updateSongPic")
    public Object updateSongPic(@RequestParam("file") MultipartFile avatorFile, @RequestParam("id") Integer id){
        JSONObject jsonObject = new JSONObject();
        if(avatorFile.isEmpty()){
            jsonObject.put(Consts.CODE, 0);
            jsonObject.put(Consts.MSG, "文件上传失败");
            return jsonObject;
        }
        //文件名 = 当前时间到毫秒 + 原来的文件名
        String fileName = System.currentTimeMillis() + avatorFile.getOriginalFilename();
        //文件路径
        String filePath = System.getProperty("user.dir") + System.getProperty("file.separator")
                + "img" + System.getProperty("file.separator") + "songPic";
        //如果文件路径不存在，新增该路径
        File file = new File(filePath);
        if(!file.exists()){
            file.mkdirs();
        }
        //实际的文件地址
        File dest = new File(filePath + System.getProperty("file.separator")  + fileName);
        //存储到数据库里的相对文件地址
        String storeAvatorPath = "/img/songPic/" + fileName;
        try {
            avatorFile.transferTo(dest);
            Song song = new Song();
            song.setId(id);
            song.setPic(storeAvatorPath);
            boolean flag = songService.update(song);
            if(flag){
                System.out.println();
                jsonObject.put(Consts.CODE, 1);
                jsonObject.put(Consts.MSG, "上传成功");
                jsonObject.put("pic", storeAvatorPath);
                return jsonObject;
            }
            jsonObject.put(Consts.CODE, 0);
            jsonObject.put(Consts.MSG, "文件上传失败");
            return jsonObject;
        } catch (IOException e) {
            jsonObject.put(Consts.CODE, 0);
            jsonObject.put(Consts.MSG, "文件上传失败" + e.getMessage());
        }finally {
            return jsonObject;
        }
    }

    /**
     * 更新歌曲内容url
     * */
    @PostMapping("/updateSongUrl")
    public Object updateSongUrl(@RequestParam("file") MultipartFile avatorFile, @RequestParam("id") Integer id){
        JSONObject jsonObject = new JSONObject();
        if(avatorFile.isEmpty()){
            jsonObject.put(Consts.CODE, 0);
            jsonObject.put(Consts.MSG, "文件上传失败");
            return jsonObject;
        }
        //文件名 = 当前时间到毫秒 + 原来的文件名
        String fileName = System.currentTimeMillis() + avatorFile.getOriginalFilename();
        //文件路径
        String filePath = System.getProperty("user.dir") + System.getProperty("file.separator") + "song";
        //如果文件路径不存在，新增该路径
        File file = new File(filePath);
        if(!file.exists()){
            file.mkdirs();
        }
        //实际的文件地址
        File dest = new File(filePath + System.getProperty("file.separator")  + fileName);
        //存储到数据库里的相对文件地址
        String storeAvatorPath = "/song/" + fileName;
        try {
            avatorFile.transferTo(dest);
            Song song = new Song();
            song.setId(id);
            song.setUrl(storeAvatorPath);
            boolean flag = songService.update(song);
            if(flag){
                jsonObject.put(Consts.CODE, 1);
                jsonObject.put(Consts.MSG, "上传成功");
                jsonObject.put("avator", storeAvatorPath);
                return jsonObject;
            }
            jsonObject.put(Consts.CODE, 0);
            jsonObject.put(Consts.MSG, "文件上传失败");
            return jsonObject;
        } catch (IOException e) {
            jsonObject.put(Consts.CODE, 0);
            jsonObject.put(Consts.MSG, "文件上传失败" + e.getMessage());
        }finally {
            return jsonObject;
        }
    }

    /**
     * 根据歌曲id查询歌曲对象
     *
     * */
    @GetMapping("/detail")
    public Object detail(Integer songId){
        JSONObject jsonObject = new JSONObject();
        return songService.selectByPrimaryKey(songId);
    }

    /**
     * 根据歌手名字精准查询歌曲对象
     *
     * */
    @GetMapping("/songOfSongName")
    public Object songOfSongName(String songName){
        JSONObject jsonObject = new JSONObject();
        return songService.songOfName(songName);
    }

    /**
     * 根据歌手名字模糊查询歌曲对象
     *
     * */
    @GetMapping("/likeSongOfName")
    public Object likeSongOfName(String songName){
        JSONObject jsonObject = new JSONObject();
        return songService.likeSongOfName(songName);
    }

    /**
     * 查询所有歌曲
     *
     * */
    @GetMapping("/allSong")
    public Object allSong(){
        return songService.allSong();
    }
}
